package Dominio;

import hbt.PersistentObject;

import java.util.List;

import javax.persistence.*;

import dto.ProveedorTO;
import Enums.TipoCategoria;


@Entity
@Table(name="proveedores")
public class Proveedor extends PersistentObject{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Column(name="razonSocial",nullable=false, length=100)
	private String razonSocial;
	
	@Column(name="cuit",nullable=false, length=11)
	private String CUIT;

	@Column(name="tipoCategoria")
	@Enumerated(EnumType.ORDINAL)
	private TipoCategoria tipoCategoria;

	
	@OneToMany (cascade=CascadeType.MERGE)
	@JoinColumn(name="idProveedor")
	private List <ListaDePrecio> listaPrecio;

	@OneToMany (cascade=CascadeType.MERGE)
	@JoinColumn(name="idProveedor")
	private List<ListaDescuentos> listaDescuento;
	
	
	@ManyToMany(cascade = {CascadeType.PERSIST})
	@JoinTable(name="proveedor_condiciones",
		joinColumns=@JoinColumn(name="idProveedor"),
		inverseJoinColumns=@JoinColumn(name="idCondicion"))
	private List<Condicion> condiciones;
	
	
	
	/////GETTERS AND SETTERS
	
	public String getRazonSocial() {
		return razonSocial;
	}
	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}
	public String getCUIT() {
		return CUIT;
	}
	public void setCUIT(String cUIT) {
		CUIT = cUIT;
	}
	
	
	public List<ListaDePrecio> getListaPrecio() {
		return listaPrecio;
	}
	public void setListaPrecio(List<ListaDePrecio> listaPrecio) {
		this.listaPrecio = listaPrecio;
	}
	
	public List<ListaDescuentos> getListaDescuento() {
		return listaDescuento;
	}
	public void setListaDescuento(List<ListaDescuentos> listaDescuento) {
		this.listaDescuento = listaDescuento;
	}
	
	
	public TipoCategoria getTipoCategoria() {
		return tipoCategoria;
	}
	public void setTipoCategoria(TipoCategoria tipoCategoria) {
		this.tipoCategoria = tipoCategoria;
	}
	public ProveedorTO toTO() {
		
		return new ProveedorTO(razonSocial, CUIT, tipoCategoria.name());
	}
	public List<Condicion> getCondiciones() {
		return condiciones;
	}
	public void setCondiciones(List<Condicion> condiciones) {
		this.condiciones = condiciones;
	}
	
	
	
}
